}));
},
- _emitDone: function(keepVisible) {
+ _emitDone: function(keepVisible, dismissed) {
if (!this._doneEmitted) {
this._doneEmitted = true;
- this.emit('done', keepVisible);
+ this.emit('done', keepVisible, dismissed);
}
},
_onSessionCompleted: function(session, gainedAuthorization) {
this._passwordBox.hide();
- this._emitDone(!gainedAuthorization);
+ this._emitDone(!gainedAuthorization, false);
},
_onSessionRequest: function(session, request, echo_on) {
cancel: function() {
this.close(global.get_current_time());
- this._emitDone(false);
+ this._emitDone(false, true);
},
};
log('polkitAuthenticationAgent: Failed to show modal dialog');
this._currentDialog.destroySession();
this._currentDialog = null;
- this._native.complete()
+ this._native.complete(false)
} else {
this._currentDialog.connect('done', Lang.bind(this, this._onDialogDone));
}
},
_onCancel: function(nativeAgent) {
- this._completeRequest(false);
+ this._completeRequest(false, false);
},
- _onDialogDone: function(dialog, keepVisible) {
- this._completeRequest(keepVisible);
+ _onDialogDone: function(dialog, keepVisible, dismissed) {
+ this._completeRequest(keepVisible, dismissed);
},
- _reallyCompleteRequest: function() {
+ _reallyCompleteRequest: function(dismissed) {
this._currentDialog.close();
this._currentDialog.destroySession();
this._currentDialog = null;
this._isCompleting = false;
- this._native.complete()
+ this._native.complete(dismissed)
},
- _completeRequest: function(keepVisible) {
+ _completeRequest: function(keepVisible, wasDismissed) {
if (this._isCompleting)
return;
Mainloop.timeout_add(2000,
Lang.bind(this,
function() {
- this._reallyCompleteRequest();
+ this._reallyCompleteRequest(wasDismissed);
}));
} else {
- this._reallyCompleteRequest();
+ this._reallyCompleteRequest(wasDismissed);
}
}
}
#include <polkitagent/polkitagent.h>
#include "shell-polkit-authentication-agent.h"
+#include <glib/gi18n.h>
+
/* uncomment for useful debug output */
/* #define SHOW_DEBUG */
g_strfreev (user_names);
}
-static void auth_request_complete (AuthRequest *request);
+static void auth_request_complete (AuthRequest *request,
+ gboolean dismissed);
static gboolean
handle_cancelled_in_idle (gpointer user_data)
}
else
{
- auth_request_complete (request);
+ auth_request_complete (request, FALSE);
}
return FALSE;
static void maybe_process_next_request (ShellPolkitAuthenticationAgent *agent);
static void
-auth_request_complete (AuthRequest *request)
+auth_request_complete (AuthRequest *request,
+ gboolean dismissed)
{
ShellPolkitAuthenticationAgent *agent = request->agent;
+ if (dismissed)
+ g_simple_async_result_set_error (request->simple,
+ POLKIT_ERROR,
+ POLKIT_ERROR_CANCELLED,
+ _("Authentation dialog was dismissed by the user"));
+
if (agent->current_request == request)
{
print_debug ("COMPLETING CURRENT %s cookie %s", request->action_id, request->cookie);
}
void
-shell_polkit_authentication_agent_complete (ShellPolkitAuthenticationAgent *agent)
+shell_polkit_authentication_agent_complete (ShellPolkitAuthenticationAgent *agent,
+ gboolean dismissed)
{
g_return_if_fail (SHELL_IS_POLKIT_AUTHENTICATION_AGENT (agent));
g_return_if_fail (agent->current_request != NULL);
- auth_request_complete (agent->current_request);
+ auth_request_complete (agent->current_request, dismissed);
}